TensorFlow 2.0 Alpha 版发布啦!赶紧来尝鲜!
文 / Wolff Dobson 和 Josh Gordon
TensorFlow 2.0 注重易用性,提供有 API 供初学者和资深人士用来创建机器学习模型。在 TensorFlow 2.0 的新功能 和 标准化 Keras 等近期发布的文章中,我们介绍过它的新功能和平台的发展方向。
我们在 TensorFlow 开发者峰会 上宣布了 TensorFlow 2.0 Alpha 版,用户现在可以抢先体验。
注:TensorFlow 开发者峰 链接
https://www.tensorflow.org/dev-summit
入门指南
要快速上手 TensorFlow 2.0 Alpha 版,最佳途径是前往 TensorFlow 的新网站。您可以在 tensorflow.org/alpha 上找到 Alpha 版的教程和指南。Alpha 版文档中的每个教程均会自动下载并安装 TensorFlow 2.0 Alpha 版,并且后续将提供更多内容!
注:tensorflow.org/alpha 链接
https://www.tensorflow.org/alpha
我们建议您先查看面向初学者和资深人士的 “Hello World” 示例,然后再阅读 Effective TensorFlow 2.0 等指南。
初学者示例 使用的是 Keras Sequential API,这是最简单的 TensorFlow 2.0 入门方法。
资深人士示例 展示如何命令式地编写正向传递、如何使用 GradientTape 编写自定义训练循环,以及如何使用 tf.function 自动编译代码(仅需一行代码!)
注:初学者示例 链接
https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/r2/tutorials/quickstart/beginner.ipynb
资深人士示例 链接
https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/r2/tutorials/quickstart/advanced.ipynb
除此之外,我们还提供有各类新 指南,包括:
重要的 AutoGraph 指南(让您能够获得图表的全部性能和可移植性,而无需编写图表级代码)
代码升级 指南(通过转换脚本可以方便地将 TensorFlow 1.x 代码转换为 2.0 代码)
其他有关 Keras 的初期指南
注:指南 链接
https://github.com/tensorflow/docs/tree/master/site/en/r2/guide
AutoGraph 链接
https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/autograph.ipynb
Kera 链接
https://github.com/tensorflow/docs/tree/master/site/en/r2/guide/keras
若您想要查看更改的内容,也可参阅 API 参考 修订版(现在符号的使用大大减少)。请注意,虽然我们正在积极开发 TensorFlow 2.0,但 tensorflow.org 的落地页仍默认为 1.x 文档。若您打算研究 API 参考,请务必选择合适的 TensorFlow 版本。
注:API 参考 链接
https://www.tensorflow.org/versions/r2.0/api_docs/python/tf
安装
若要安装 Alpha 版,我们建议您创建一个新的虚拟环境并使用 “pip install --upgrade --pre tensorflow” 或 “tensorflow-gpu”(需要 CUDA 10)。我们会较为频繁地更新此版本,添加新功能。您亦可将 “!” 添加至命令 “!pip install --upgrade --pre tensorflow”,在 Colab 中试用。(以上所有教程和指南均会自动安装最新版本)。
注:Colab 链接
https://colab.research.google.com/notebooks/welcome.ipynb#recent=true
函数,而非会话
下面我们深入介绍 2.0 中的这两个功能如何协同工作:Eager execution 与 “@tf.function”。
其中一个最明显的变化是,TensorFlow 是 “Eager 优先”,这意味着 op 在调用后会立即运行。在 TensorFlow 1.x 中,您可能会先构图,然后通过 “tf.Session.run()” 执行图的各个部分。TensorFlow 2.0 从根本上简化了 TensorFlow 的使用 — 同样出色的 op,现在却更易理解和使用。
a = tf.constant([1, 2])
b = tf.constant([3, 4])
print(a + b)
# returns: tf.Tensor([4 6], shape=(2,), dtype=int32)
TensorFlow 2.0 使用 Keras 作为开发者的核心体验。在 2.0 中,您可以如常使用 Keras,利用 Sequential API 构建模型,然后使用 “compile” 和 “fit”。tensorflow.org 中所有这些熟悉的 “tf.keras” 示例均可在 2.0 中实现 “开箱即用”。
Keras 的 “fit()” 适用于很多情况,但是,需要更高灵活性的开发者现在可以有更多选择。我们来看一下 此示例 中以 TensorFlow 2.0 风格编写的自定义训练循环:
def train_one_step(model, optimizer, x, y):
with tf.GradientTape() as tape:
logits = model(x)
loss = compute_loss(y, logits)
grads = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))
compute_accuracy(y, logits)
return loss
def train(model, optimizer):
train_ds = mnist_dataset()
step = 0
loss = 0.0
for x, y in train_ds:
step += 1
loss = train_one_step(model, optimizer, x, y)
if tf.equal(step % 10, 0):
tf.print('Step', step, ': loss',
loss, '; accuracy', compute_accuracy.result())
return step, loss, accuracy
注:此示例 链接
https://github.com/tensorflow/docs/blob/master/site/en/r2/guide/autograph.ipynb
此示例采用 Autograd 风格的 GradientTape,并通过优化器手动应用您的梯度。在编写具有复杂内部运作的自定义训练循环(譬如在强化学习中)或进行研究(轻松帮您落实提高优化器效率的新想法)时,这特别有帮助。
“Eager execution” 还有助于调试和监控运行中的代码,您可以使用 Python 调试程序检查变量、层及梯度等对象。在训练循环中,我们使用 “if”、“for” 和 “print()” 等 Python 语句。
一旦代码运行正常,您便会想要获得图表优化和效率。为此,您可以利用装饰器 “@tf.function” 封装 “train”。“tf.function” 中内置 Autograph,因此您无需任何特殊操作便可获取以用图表效率运行的 “if” 或 “for” 子句。
@tf.function
def train(model, optimizer):
train_ds = mnist_dataset()
step = 0
loss = 0
accuracy = 0
for x, y in train_ds:
# 如上所述,包括“if”和“print()”
return step
这段代码并不会受注释影响,但我们会将其编译到可在 GPU、TPU 上轻松运行的图表中,或将其保存至 “SavedModel” 留待后用。
针对这对代码,尤为有趣之处在于,通过在 “@tf.function” 中封装 “train()”,“train_one_step()”、“compute_loss()” 和 “compute_accuracy()” 也会自动进行转换。您也可选择在 “@tf.function” 中仅封装部分运算,从而获得所需行为。
此外,TensorFlow 2.0 完全支持 Estimator。请参阅新 教程,了解提升树和模型理解的相关内容。
注:教程 链接
https://github.com/tensorflow/docs/tree/master/site/en/r2/tutorials/estimators
诚邀您参与测试并提供反馈!
如果您能在试用最新版本并升级模型后提供反馈,我们将感激不尽!请加入 testing@ TensorFlow 用户小组,也欢迎您参加我们每周一次的 TensorFlow 2.0 支持站会(美国西部太平洋时间周二下午 2:00,同步北京时间周三早上 6:00)。
注:testing@ TensorFlow 用户小组 链接
https://groups.google.com/a/tensorflow.org/forum/?utm_medium=email&utm_source=footer#!forum/testing
TensorFlow 2.0 支持站会 链接
https://docs.google.com/document/d/1i9_Ey9rYtslS6fryZ5Wm0vWWbrpScW3oh9bTRNVQ87Q/edit#heading=h.w7a5riqlaj2b
您可能会发现错误、性能问题等异常,欢迎您在标记 2.0 标签 的 Issue Tracker 中举报上述问题。如能提供可准确再现该错误的最小完整示例,将会非常有帮助。
注:2.0 标签 链接
https://github.com/tensorflow/tensorflow/issues?q=is%3Aissue+is%3Aopen+label%3A2.0
更多功能,敬请期待
如要及时跟进 TensorFlow 2.0 的已知问题和开发工作,请参阅 Github 上的 TensorFlow 2.0 Project Tracker。我们将持续开发并改进 TensorFlow 2.0,您应该会时常看到我们发布的 Nightly build 软件包升级。需要说明的是,这是开发者预览版。期待您的反馈!
注:TensorFlow 2.0 Project Tracker 链接
https://github.com/orgs/tensorflow/projects/4
另外,如果您已使用 TensorFlow 2.0 构建出不错的作品,譬如移动应用、研究项目、艺术装置等,欢迎您告诉我们,我们很乐意看到您的作品。请在 此处 告诉我们。
注:此处 链接
https://services.google.com/fb/forms/tensorflowcasestudy/
如果您愿意分享近期开发的示例,请考虑提交 PR,将其添加至 TensorFlow 组织,作为 tensorflow/examples/community 的一部分(https://github.com/tensorflow/examples/tree/master/community)。
更多 AI 相关阅读: